home *** CD-ROM | disk | FTP | other *** search
- /*=============================================================================*/
- /* Makes new atoms, one at a time. Do not expect a repeat solution.
- You must ask each time you want an atom. It starts with some root,
- and appends an incrementing number onto it.
-
- Ask: ?-gensym( student, X ). get: X = student1.
- ?-gensym( student, X ). get: X = student2.
- ?-gensym( student, X ). get: X = student3.
-
- and ad infinitum. */
-
- gensym( Root, Atom ) :-
- get_num( Root, Num ),
- name( Root, Name1 ),
- integer_name( Num, Name2 ),
- append( Name1, Name2, Name ),
- name( Atom, Name ).
-
- get_num( Root, Num ) :-
- retract( current_num( Root, Num1 )), !,
- Num is Num1 + 1,
- asserta( current_num( Root, Num)).
-
- get_num( Root, 1 ) :- asserta( current_num( Root, 1 )).
-
- integer_name( Int, List ) :- integer_name( Int, [], List ).
- integer_name( I, Sofar, [C|Sofar] ) :-
- I < 10, !, C is I + 48.
- integer_name( I, Sofar, List ) :-
- Tophalf is I/10,
- Bothalf is I mod 10,
- C is Bothalf + 48,
- integer_name( Tophalf, [C|Sofar], List ).
-
-
- append( [], L, L ).
- append( [Z|L1], L2, [Z|L3] ) :- append( L1, L2, L3 ).
-
- printstring( [] ).
- printstring( [] ).
- printstring( [H|T] ) :- put( H ), printstring( T ).
- /*=============================================================================*/